package edu.northwestern.cbits.purple_robot_manager.tests;
import junit.framework.Assert;
import org.json.JSONException;
import org.json.JSONObject;
import org.mozilla.javascript.NativeJavaObject;
import android.content.Context;
import android.hardware.SensorManager;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.probes.Probe;
import edu.northwestern.cbits.purple_robot_manager.probes.ProbeManager;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.AccelerometerProbe;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.ContinuousProbe;
import edu.northwestern.cbits.purple_robot_manager.scripting.BaseScriptEngine;
public class JavascriptTestCase extends RobotTestCase
{
public JavascriptTestCase(Context context, int priority)
{
super(context, priority);
}
@Override
public void test()
{
if (this.isSelected(this._context) == false)
return;
this.broadcastUpdate("Testing PurpleRobot.updateProbe...");
try
{
JSONObject probeSettings = new JSONObject();
probeSettings.put(Probe.PROBE_NAME, AccelerometerProbe.NAME);
probeSettings.put(Probe.PROBE_ENABLED, true);
probeSettings.put(Probe.PROBE_FREQUENCY, SensorManager.SENSOR_DELAY_FASTEST);
probeSettings.put(ContinuousProbe.PROBE_THRESHOLD, 0.0);
Object returned = BaseScriptEngine.runScript(this._context, "PurpleRobot.updateProbe("
+ probeSettings.toString().replace("\"", "'") + ");");
Thread.sleep(2000);
Assert.assertEquals("JST0", returned.getClass(), Boolean.class);
Assert.assertTrue("JST1", ((Boolean) returned).booleanValue());
AccelerometerProbe probe = (AccelerometerProbe) ProbeManager.probeForName(
probeSettings.getString(Probe.PROBE_NAME), this._context);
Assert.assertNotNull("JST2", probe);
Thread.sleep(2000);
Assert.assertEquals("JST3", probe.isEnabled(this._context), probeSettings.getBoolean(Probe.PROBE_ENABLED));
Assert.assertEquals("JST4", probe.getFrequency(), probeSettings.getInt(Probe.PROBE_FREQUENCY));
Assert.assertEquals("JST5", probe.getThreshold(), probeSettings.getDouble(ContinuousProbe.PROBE_THRESHOLD));
probeSettings.put(Probe.PROBE_ENABLED, false);
probeSettings.put(Probe.PROBE_FREQUENCY, SensorManager.SENSOR_DELAY_NORMAL);
probeSettings.put(ContinuousProbe.PROBE_THRESHOLD, 1.0);
returned = BaseScriptEngine.runScript(this._context, "PurpleRobot.updateProbe("
+ probeSettings.toString().replace("\"", "'") + ");");
Thread.sleep(2000);
Assert.assertEquals("JST6", returned.getClass(), Boolean.class);
Assert.assertTrue("JST7", ((Boolean) returned).booleanValue());
Assert.assertEquals("JST8", probe.isEnabled(this._context), probeSettings.getBoolean(Probe.PROBE_ENABLED));
Assert.assertEquals("JST9", probe.getFrequency(), probeSettings.getInt(Probe.PROBE_FREQUENCY));
Assert.assertEquals("JST10", probe.getThreshold(), probeSettings.getDouble(ContinuousProbe.PROBE_THRESHOLD));
NativeJavaObject value = (NativeJavaObject) BaseScriptEngine.runScript(this._context,
"PurpleRobot.getUploadUrl();");
String original = "null";
if (value != null)
original = value.unwrap().toString();
BaseScriptEngine.runScript(this._context, "PurpleRobot.setUploadUrl('http://www.example.com/pr/');");
value = (NativeJavaObject) BaseScriptEngine.runScript(this._context, "PurpleRobot.getUploadUrl();");
Assert.assertNotNull("JST11", value);
Assert.assertEquals("JST12", value.unwrap().toString(), "http://www.example.com/pr/");
BaseScriptEngine.runScript(this._context, "PurpleRobot.setUploadUrl('" + original + "');");
value = (NativeJavaObject) BaseScriptEngine.runScript(this._context, "PurpleRobot.getUploadUrl();");
if (value == null)
{
}
else
{
Assert.assertEquals("JST13", value.unwrap().toString(), original);
}
}
catch (JSONException e)
{
Assert.fail("JST1000");
}
catch (InterruptedException e)
{
Assert.fail("JST1001");
}
}
@Override
public int estimatedMinutes()
{
return 1;
}
@Override
public String name(Context context)
{
return context.getString(R.string.name_javascript_test);
}
}